
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;

/*
 * Clase que implementa los cuadrados que serviran de tablero
 * desde donde saldran y se llevaran las fichas en juego.
 * @author Matías Díaz
 * @author Sergio Flores
 * 
 */

public class Tablero
{

    private String tamaño;
    private ArrayList<JCuadrado> cuadrados;
    private ArrayList<Color> colores;
    private JCuadrado cuadradoAux;
    private Point punto;
    private boolean tableroDeJuego;

    /**
     * metodo constructor vacio que inicializa solo la lista de cuadrados.
     */
    public Tablero ()
    {

        this.cuadrados = new ArrayList<JCuadrado> ();

    }

    /**
     * metodo constructor que inicializa  todos los parametros de clase.
     * @param tamano del tablero
     * @param punto inicial desde donde se dibujaran los cuadrados.
     * @param tableroDeJuego es el tablero donde se realiza el juego.
     */
    public Tablero ( String tamaño , Point punto , boolean tableroDeJuego )
    {
        this.tamaño = tamaño;
        this.cuadrados = new ArrayList<JCuadrado> ();
        this.punto = punto;
        this.creaCuadrados ();
        this.tableroDeJuego = tableroDeJuego;
    }

    /**
     *metod que setea el tamano del tablero que se dibujara.
     */
    public void creaCuadrados ()
    {
        switch ( this.tamaño )
        {
            case CommandName.DOS_DOS:
                this.creaElCuadrado ( 2 );
                break;
            case CommandName.TRES_TRES:
                this.creaElCuadrado ( 3 );
                break;
            case CommandName.CUATRO_CUATRO:
                this.creaElCuadrado ( 4 );
                break;
            case CommandName.CINCO_CINCO:
                this.creaElCuadrado ( 5 );
                break;
            case CommandName.SEIS_SEIS:
                this.creaElCuadrado ( 6 );
                break;
            default:
                System.out.println ( "Problemas en el tamaño de la matriz en CreaFicha---> CreaFichas" );
                break;
        }
    }

    /**
     * comprueba que un punto esta dentro de un cuadrado.
     * @param point punto que se revisara si esta dentro de un cuadrado.
     * @return el punto o null, dependiendo si este estaba en algun cuadrado
     */
    public Point compruebaPunto ( Point point )
    {
        for ( JCuadrado cuadra : this.cuadrados )
        {
            if ( point.x > cuadra.getPunto ().x && point.x < cuadra.getPunto ().x + 100 && point.y > cuadra.getPunto ().y && point.y < cuadra.getPunto ().y + 100 )
            {
                return cuadra.getPunto ();
            }
        }

        return null;

    }

    /**
     *  clase que crea los cuadrados segun un tamano especifico
     * @param numero de cuadrados que tiene que tener el tablero
     */
    public void creaElCuadrado ( int numero )
    {
        int rememberPointX = this.punto.x;
        for ( int i = 0 ; i < numero ; i++ )
        {
            for ( int j = 0 ; j < numero ; j++ )
            {
                cuadrados.add ( new JCuadrado ( this.punto ) );
                this.punto = new Point ( this.punto.x + 102 , this.punto.y );
            }
            this.punto = new Point ( rememberPointX , this.punto.y + 102 );
        }
    }

    /**
     * metodo que dibuja los cuadrados en la pantalla
     * @param g area grafica donde se dibujaran los cuadrados.
     */
    public void paint ( Graphics g )
    {
        for ( JCuadrado cuadra : this.cuadrados )
        {
            cuadra.paint ( g );
        }
    }
}
